Intent 本質上是一個 Message object 他主要被 APP 與 Android Systems 用來向其他組件[Activity,Service, BroadCast Receiver] 請求特定的動作 intent 不是專門為IPC設計 他主要是用來 應用程式內組件通訊 當發生需要與不同Process 組件通訊 intent 可以作為IPC的一種方式
Intent 主要有3種功能 1 啟動Activity, 2 啟動service 3 發送廣播
intent 很常用來 啟動Activity 並在兩個組件中傳遞資料
Intent intent = new Intent(this, ContactDetailActivity.class);
intent.putExtra("contact_id", selectedContactId);
startActivity(intent);
透過 intent 啟動 ContactDetailActivity 並傳遞 contact_id=selectedConteactId
intent 可以用來啟動 Service 或是 Bind 到其他Service 上
啟動一個 download 的背景service 並傳遞URL 給他
Intent intent = new Intent(this, DownloadService.class);
intent.putExtra("file_url", fileUrl);
startService(intent);
intent 可以透過 Broadcast 傳遞全局 或是特定APP可以接受的訊息
Intent intent = new Intent("com.example.ACTION_BATTERY_LOW");
sendBroadcast(intent);
在Android 中intnet 有分2種 一個是顯示intent 另一個是隱式的intnet
它們兩個主要差別式 顯示intent 會有個具體的目標 也就是他知道要傳給哪個Component
而隱式反之
顯示intent 基本上會傳給 Activity, BroadCast Receivers, Services 等等 的組件
啟動 TargetActivity 透過明確指定方式
Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent);
隱式intent 雖然不知道目標Target 的 component在哪 但Android Systems 會幫忙找到 適合的component
把 intent 傳入
隱式的話 需要定義Intent Action 系統會去APP 找那些Intent-filter 有宣告這個intent Action 例如參考以下程式
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.example.com"));
startActivity(intent);
系統或去找 有宣告 例如Browser 程式 如果有多個Android Systems 可能會問你要選哪個Browser來開啟URL?
隱式機制簡圖